home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / MacGambit 2.0 / sources2 / Interp⁄Comp (.scm) / target-m68000-2.scm < prev    next >
Encoding:
Text File  |  1992-06-04  |  61.2 KB  |  117 lines  |  [TEXT/gamI]

  1. (define (emit-asr.l opnd1 opnd2)
  2.   (if (dreg? opnd1)
  3.     (asm-word (+ #xe0a0 (+ (* (dreg-num opnd1) 512) (dreg-num opnd2))))
  4.     (let ((n (imm-val opnd1)))
  5.       (asm-word (+ #xe080 (+ (* (if (= n 8) 0 n) 512) (dreg-num opnd2))))))
  6.   (if ofile-asm?
  7.     (emit-asm "asrl" ofile-tab (opnd-str opnd1) "," (opnd-str opnd2))))
  8.  
  9. (define (emit-asr.w opnd1 opnd2)
  10.   (if (dreg? opnd1)
  11.     (asm-word (+ #xe060 (+ (* (dreg-num opnd1) 512) (dreg-num opnd2))))
  12.     (let ((n (imm-val opnd1)))
  13.       (asm-word (+ #xe040 (+ (* (if (= n 8) 0 n) 512) (dreg-num opnd2))))))
  14.   (if ofile-asm?
  15.     (emit-asm "asrw" ofile-tab (opnd-str opnd1) "," (opnd-str opnd2))))
  16.  
  17. (define (emit-lsl.l opnd1 opnd2)
  18.   (if (dreg? opnd1)
  19.     (asm-word (+ #xe1a8 (+ (* (dreg-num opnd1) 512) (dreg-num opnd2))))
  20.     (let ((n (imm-val opnd1)))
  21.       (asm-word (+ #xe188 (+ (* (if (= n 8) 0 n) 512) (dreg-num opnd2))))))
  22.   (if ofile-asm?
  23.     (emit-asm "lsll" ofile-tab (opnd-str opnd1) "," (opnd-str opnd2))))
  24.  
  25. (define (emit-lsr.l opnd1 opnd2)
  26.   (if (dreg? opnd1)
  27.     (asm-word (+ #xe0a8 (+ (* (dreg-num opnd1) 512) (dreg-num opnd2))))
  28.     (let ((n (imm-val opnd1)))
  29.       (asm-word (+ #xe088 (+ (* (if (= n 8) 0 n) 512) (dreg-num opnd2))))))
  30.   (if ofile-asm?
  31.     (emit-asm "lsrl" ofile-tab (opnd-str opnd1) "," (opnd-str opnd2))))
  32.  
  33. (define (emit-lsr.w opnd1 opnd2)
  34.   (if (dreg? opnd1)
  35.     (asm-word (+ #xe068 (+ (* (dreg-num opnd1) 512) (dreg-num opnd2))))
  36.     (let ((n (imm-val opnd1)))
  37.       (asm-word (+ #xe048 (+ (* (if (= n 8) 0 n) 512) (dreg-num opnd2))))))
  38.   (if ofile-asm?
  39.     (emit-asm "lsrw" ofile-tab (opnd-str opnd1) "," (opnd-str opnd2))))
  40.  
  41. (define (emit-clr.l opnd)
  42.   (asm-word (+ #x4280 (opnd->mode/reg opnd)))
  43.   (opnd-ext-wr-long opnd)
  44.   (if ofile-asm?
  45.     (emit-asm "clrl" ofile-tab (opnd-str opnd))))
  46.  
  47. (define (emit-neg.l opnd)
  48.   (asm-word (+ #x4480 (opnd->mode/reg opnd)))
  49.   (opnd-ext-wr-long opnd)
  50.   (if ofile-asm?
  51.     (emit-asm "negl" ofile-tab (opnd-str opnd))))
  52.  
  53. (define (emit-not.l opnd)
  54.   (asm-word (+ #x4680 (opnd->mode/reg opnd)))
  55.   (opnd-ext-wr-long opnd)
  56.   (if ofile-asm?
  57.     (emit-asm "notl" ofile-tab (opnd-str opnd))))
  58.  
  59. (define (emit-ext.l opnd)
  60.   (asm-word (+ #x48c0 (dreg-num opnd)))
  61.   (if ofile-asm?
  62.     (emit-asm "extl" ofile-tab (opnd-str opnd))))
  63.  
  64. (define (emit-ext.w opnd)
  65.   (asm-word (+ #x4880 (dreg-num opnd)))
  66.   (if ofile-asm?
  67.     (emit-asm "extw" ofile-tab (opnd-str opnd))))
  68.  
  69. (define (emit-swap opnd)
  70.   (asm-word (+ #x4840 (dreg-num opnd)))
  71.   (if ofile-asm?
  72.     (emit-asm "swap" ofile-tab (opnd-str opnd))))
  73.  
  74. (define (emit-cmp.l opnd1 opnd2)
  75.   (cond ((areg? opnd2)
  76.          (asm-word (+ #xb1c0 (+ (* (areg-num opnd2) 512) (opnd->mode/reg opnd1))))
  77.          (opnd-ext-rd-long opnd1))
  78.         ((imm? opnd1)
  79.          (asm-word (+ #x0c80 (opnd->mode/reg opnd2)))
  80.          (opnd-ext-rd-long opnd1)
  81.          (opnd-ext-rd-long opnd2))
  82.         (else
  83.          (asm-word (+ #xb080 (+ (* (dreg-num opnd2) 512) (opnd->mode/reg opnd1))))
  84.          (opnd-ext-rd-long opnd1)))
  85.   (if ofile-asm?
  86.     (emit-asm "cmpl" ofile-tab (opnd-str opnd1) "," (opnd-str opnd2))))
  87.  
  88. (define (emit-cmp.w opnd1 opnd2)
  89.   (cond ((areg? opnd2)
  90.          (asm-word (+ #xb0c0 (+ (* (areg-num opnd2) 512) (opnd->mode/reg opnd1))))
  91.          (opnd-ext-rd-word opnd1))
  92.         ((imm? opnd1)
  93.          (asm-word (+ #x0c40 (opnd->mode/reg opnd2)))
  94.          (opnd-ext-rd-word opnd1)
  95.          (opnd-ext-rd-word opnd2))
  96.         (else
  97.          (asm-word (+ #xb040 (+ (* (dreg-num opnd2) 512) (opnd->mode/reg opnd1))))
  98.          (opnd-ext-rd-word opnd1)))
  99.   (if ofile-asm?
  100.     (emit-asm "cmpw" ofile-tab (opnd-str opnd1) "," (opnd-str opnd2))))
  101.  
  102. (define (emit-cmp.b opnd1 opnd2)
  103.   (cond ((imm? opnd1)
  104.          (asm-word (+ #x0c00 (opnd->mode/reg opnd2)))
  105.          (opnd-ext-rd-word opnd1)
  106.          (opnd-ext-rd-word opnd2))
  107.         (else
  108.          (asm-word (+ #xb000 (+ (* (dreg-num opnd2) 512) (opnd->mode/reg opnd1))))
  109.          (opnd-ext-rd-word opnd1)))
  110.   (if ofile-asm?
  111.     (emit-asm "cmpb" ofile-tab (opnd-str opnd1) "," (opnd-str opnd2))))
  112.  
  113. (define (emit-tst.l opnd)
  114.   (asm-word (+ #x4a80 (opnd->mode/reg opnd)))
  115.   (opnd-ext-rd-long opnd)
  116.   (